package cn.spdb.harrier.server.master.rpc.transport;

import java.util.List;

import cn.spdb.harrier.common.model.JobSignal;
import cn.spdb.harrier.dao.entity.UdsComplement;
import cn.spdb.harrier.dao.entity.UdsJobStepRecord;
import cn.spdb.harrier.rpc.common.RpcHandler;
import cn.spdb.harrier.rpc.common.RpcMethod;
import cn.spdb.harrier.server.entity.JobExecutionContext;
import cn.spdb.harrier.server.entity.WorkingInfo;

/**
 * Master节点与Worker节点之间的RPC通信接口，用于处理任务调度、状态更新、命令执行等操作。
 */
@RpcHandler("MasterTransportServerInterfasce")
public interface MasterTransportServerInterfasce {

    /**
     * 推送作业信号（如启动、停止）给Worker节点
     *
     * @param jobSignal 作业信号对象
     * @return Boolean 操作是否成功
     */
    @RpcMethod
    Boolean streamJobSignal(JobSignal jobSignal);

    /**
     * 通知Master当前作业上下文已完成
     *
     * @param jobContext 作业上下文信息
     */
    @RpcMethod
    void jobContextDone(JobExecutionContext jobContext);

    /**
     * 更新Worker的工作状态信息
     *
     * @param workingInfo 工作信息对象
     */
    @RpcMethod
    void updateWorkingInfo(WorkingInfo workingInfo);

    /**
     * 插入作业步骤记录
     *
     * @param record 作业步骤记录对象
     */
    @RpcMethod
    void insertUdsJobStepRecord(UdsJobStepRecord record);

    /**
     * 更新作业步骤记录状态
     *
     * @param record 作业步骤记录对象
     */
    @RpcMethod
    void updateJobStepRecord(UdsJobStepRecord record);

    /**
     * 执行补数据作业任务
     *
     * @param jobList   补数据作业列表
     * @param complement 补数据参数配置
     * @return Boolean 是否提交成功
     */
    @RpcMethod
    Boolean complementJob(List<String[]> jobList, UdsComplement complement);

    /**
     * 插入新的作业执行记录
     *
     * @param jobContext 作业上下文信息
     */
    @RpcMethod
    void insertUdsJobRecord(JobExecutionContext jobContext);

    /**
     * 执行远程命令并返回结果
     *
     * @param cmd  命令名称
     * @param args 命令参数
     * @return String 命令执行结果
     */
    @RpcMethod
    String command(String cmd, String... args);
}
